iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0

這篇是這個專案不會用到的功能,但是也算是重要
這篇主要就是說該怎麼做,不會示範專案操作
如果需要詳細的教學,我覺得官方的寫得很不錯
https://developer.android.com/courses/android-basics-compose/unit-5?hl=zh-tw

網路API

這是簡易版教學

要使用Restful APi,要先引入retrofit的dependency

// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
// Retrofit with Scalar Converter
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")

對應資料型態

要先建立一個和API結構相同的data class

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}
data class TodoApiItem(
    val userId: Int,
    val id: Int,
    val title: String,
    val completed: Boolean
)

定義存取方式

這部分跟database很像,定義一個interface(交互方式)

interface TodoApiService {
    @GET("todos/{id}") // use GET method
    suspend fun getTodoById(@Path("id") id: Int): TodoApiItem
}

定義Retrofit實例

建立一個object,避免retrofit反覆create吃效能

object RetrofitInstance {
    private const val BASE_URL = "https://jsonplaceholder.typicode.com/"

    val api: TodoApiService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(TodoApiService::class.java)
    }
}

使用

使用retrofit實例.api搭配定義好的方法就可以存取
搭配try catch來捕獲錯誤

try {
	val result = RetrofitInstance.api.getTodoById(id)
} catch (e: Exception) {
	Log.e("API", "Error: ${e.message}")
}

注意

在使用網路連線必須先要求權限,AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

這邊的是極簡建立方式,還有一些方式,像是okHttp的連線方式,又或是用kotlin-serializer-json來解析傳回的json字串都是很常見的作法

網路圖片

這邊也是淺說一下,Android官方的教學也不錯
先引入Coil的庫

implementation("io.coil-kt:coil-compose:2.4.0")

使用

這是從官方教學摳來的範例

AsyncImage(
	model = ImageRequest.Builder(context = LocalContext.current).data(photoURL)
		.crossfade(true).build(),
	error = painterResource(R.drawable.ic_broken_image),
	placeholder = painterResource(R.drawable.loading_img),
	contentDescription = "description",
	contentScale = ContentScale.Crop, // 置中裁減
	modifier = Modifier.fillMaxWidth()
)

上一篇
Day 19:增進App整體使用體驗
下一篇
Day 21:使用SQL保留資料
系列文
現代Android jetpack compose開發入門21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言